/**
 * 本地存储工具类
 */
class Storage {
  /**
   * 设置localStorage
   * @param {string} key 键名
   * @param {any} value 值
   */
  setLocal(key, value) {
    try {
      const data = JSON.stringify(value)
      localStorage.setItem(key, data)
    } catch (error) {
      console.error('localStorage设置失败:', error)
    }
  }

  /**
   * 获取localStorage
   * @param {string} key 键名
   * @param {any} defaultValue 默认值
   * @returns {any}
   */
  getLocal(key, defaultValue = null) {
    try {
      const data = localStorage.getItem(key)
      return data ? JSON.parse(data) : defaultValue
    } catch (error) {
      console.error('localStorage获取失败:', error)
      return defaultValue
    }
  }

  /**
   * 删除localStorage
   * @param {string} key 键名
   */
  removeLocal(key) {
    try {
      localStorage.removeItem(key)
    } catch (error) {
      console.error('localStorage删除失败:', error)
    }
  }

  /**
   * 清空localStorage
   */
  clearLocal() {
    try {
      localStorage.clear()
    } catch (error) {
      console.error('localStorage清空失败:', error)
    }
  }

  /**
   * 设置sessionStorage
   * @param {string} key 键名
   * @param {any} value 值
   */
  setSession(key, value) {
    try {
      const data = JSON.stringify(value)
      sessionStorage.setItem(key, data)
    } catch (error) {
      console.error('sessionStorage设置失败:', error)
    }
  }

  /**
   * 获取sessionStorage
   * @param {string} key 键名
   * @param {any} defaultValue 默认值
   * @returns {any}
   */
  getSession(key, defaultValue = null) {
    try {
      const data = sessionStorage.getItem(key)
      return data ? JSON.parse(data) : defaultValue
    } catch (error) {
      console.error('sessionStorage获取失败:', error)
      return defaultValue
    }
  }

  /**
   * 删除sessionStorage
   * @param {string} key 键名
   */
  removeSession(key) {
    try {
      sessionStorage.removeItem(key)
    } catch (error) {
      console.error('sessionStorage删除失败:', error)
    }
  }

  /**
   * 清空sessionStorage
   */
  clearSession() {
    try {
      sessionStorage.clear()
    } catch (error) {
      console.error('sessionStorage清空失败:', error)
    }
  }
}

export default new Storage()
